from contextlib import asynccontextmanager
from fastapi import FastAPI


@asynccontextmanager
async def app_context(app: FastAPI):
    """
    用于脚本中运行 FastAPI lifespan 的上下文管理器。
    避免直接访问 app.router.on_startup/on_shutdown，保持兼容性与封装性。
    """
    lifespan_context = app.router.lifespan_context or app.lifespan_context
    if lifespan_context is None:
        raise RuntimeError("FastAPI app 没有定义 lifespan 上下文，无法运行")

    async with lifespan_context(app):
        yield app